function ansiConvert(i) {
  let g = i >> 4; // 高4位
  let d = i & 0x0f;  // 低4位  0x0f==15
  console.log("高", g, "低", d)
  let a = parseInt(g.toString(16).toUpperCase().charCodeAt().toString(16))
  let b = parseInt(d.toString(16).toUpperCase().charCodeAt().toString(16))
  console.log(i, "===>", ['0x' + a, '0x' + b])
  return ['0x' + a, '0x' + b]
}

/**
 * 10进制
 * @param arr
 * @returns {number}
 */
function convertAnsi(arr) {
  let a = "0x" + arr[0].replace("0x", "")
  let b = "0x" + arr[1].replace("0x", "")
  let g = String.fromCharCode(a.toString())
  let d = String.fromCharCode(b.toString())
  console.log(arr, "===>", g + d)
  return parseInt(g + d, 16)
}

function logic2Total(arr) {
  let add = arr[0] // 地址 1字节
  let no = arr[1] // 箱号 1字节
  let cmd = arr[2] // 命令 1字节
  // arr[3] // 数据 n字节
  let data = [
    '0x05', // 码头 （1字节）固定为：0x05
    '0x30', // 保留 （1字节）
    // 地址 （2字节）
    ...ansiConvert(add),
    // 箱号 （2字节）
    ...ansiConvert(no),
    // 命令 （2字节）
    ...ansiConvert(cmd),
    '0x30', // 保留 （1字节）      // 0x30, // 数据 （n字节）
    '0x03', // 码尾 （1字节）固定为：0x03
  ]
  return data.concat(...ansiConvert(getJyNum(data)))
}

function getJyNum(data) {
  let sum = 0x00;
  for (let datum of data) {
    sum += parseInt(datum, 16)
  }
  let str = sum.toString(2).substr(-8, 8)
  return parseInt(str, 2)
}

export {
  // logic2Total([0, 0, 5])
  logic2Total,
  convertAnsi
}
